package Offer;

/**
 * 二叉搜索树的第k大节点
 * @author 是阿秋啊
 * @date 2022/04/13 11:47
 **/
public class Num54 {
    int count,ret;
    public int kthLargest(TreeNode root, int k) {
        count = k;
        dfs(root);
        return ret;
    }
    // 搜索树中序遍历是从小到大，反着就是从大到小
    // 因此可以借用反着中序遍历的方法来进行递归，一步一步走向小，第k个即为要找的
    private void dfs(TreeNode root) {
        if (root == null) {
            return;
        }
        dfs(root.right);
        if (count == 0) {
            return;
        }
        if (--count == 0) {
            ret = root.val;
        }
        dfs(root.left);
    }
}
